public class Main3 {
    public static void main(String[] args) {
        Student stu = new Student();  //定义一个引用变量。java定义引用变量，使用的格式是【类名 变量名 = new 类名()】
        //给对象变量赋值前，打印下成员变量的默认值
        System.out.println(stu.name + ","+ stu.age);

        stu.name = "zhangsan";
        stu.age = 18;
        //给对象变量赋值后，打印下成员变量
        System.out.println(stu.name + "," + stu.age);

        Student stu2 = new Student();  //在Main3主类里，new一个实例化对象stu2，类型是Student类型，是引用类型，有Student的所有方法
        int a = 5;
        int b = 3;
        stu2.swap(a,b);  //实际上这里传入的是a和b的值，不是变量本身，等价于swap(5,3),void swap方法拿到这两个值后，分别赋值给自己的变量a、b，和我们这定义的变量a、b没有关系
        System.out.println("a = " +a + ", b = " +b );  //打印出来的结果是a=5，b=3，a和b的值并没有交换，
                                                    // 原因是因为对于方法的传参，基本类型的参数传进去的是变量的值，而不是变量本身

        Student s1 = new Student();  //新建一个Student类对象s1
        StuName sn = new StuName();  //新建一个StuName类对象sn
        sn.a(s1);   //使用类对象sn的a方法处理类对象s1，a方法拿到的依然是Student对象的引用，传入的是引用类型，操作的就是引用类型本身了
        System.out.println(s1.name);   //打印查看类对象s的对方属性name是什么

        Student s2 = sn.b(s1);  //新建一个Student类对象，是由sn类对象的b方法返回的


        System.out.println(s2.name);  //打印s2类型的类属性name的值
        System.out.println(s1 == s2);  //判断s1和s2两个类对象是否相同。两者实际为同一个对象，s1进入sn方法转了一圈又出来了变成s2.
        //引用类型之间的比较，就是看是不是指向同一个对象。

    }
}
